package DataIO;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;

/**
 * Classe pour les données binaire des centrales thermiques
 * @author PoKo
 *
 */
public class BinaireThermique {
	
	/** tableau pour les paliers de production */
	private double[][] paliers;
	
	/** tableau pour les 100 scenarios des centrales */
	private double[][][][] scenarios;
	
	/**
	 * Constructeur
	 * @param file
	 */
	public BinaireThermique(String file){
		paliers = new double[4][];
		paliers[0] = new double[3];
		paliers[1] = new double[4];
		paliers[2] = new double[4];
		paliers[3] = new double[5];

		scenarios = new double[4][][][];
		scenarios[0]=new double[7][3][100];
		scenarios[1]=new double[7][4][100];
		scenarios[2]=new double[7][4][100];
		scenarios[3]=new double[7][5][100];
		try {
			readData( file);
		} catch (InvalidFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void readData(String file) throws InvalidFormatException, IOException{
		InputStream inp = new FileInputStream(file);
		Workbook wb = WorkbookFactory.create(inp);
		//Paliers
		int sheetindex = 1,i=0;
		for(double[] palier : paliers){
			Sheet sheet1 = wb.getSheetAt(sheetindex);
			int colindex=1,j=0;
			Row rpal = sheet1.getRow(1);
			for(double pal : palier){
				Cell cell = rpal.getCell(colindex);
				switch (cell.getCellType()) {
				case Cell.CELL_TYPE_NUMERIC:

					if (!DateUtil.isCellDateFormatted(cell)) {
						//System.out.print(cell.getNumericCellValue()+ " ");
						paliers[i][j]=cell.getNumericCellValue();
					}
					break;
				default:
					System.out.println("Si vous voyez ceci, il y'a un probl�me dans la mise en forme des donn�es du xls");
				}
				colindex++;
				j++;
			}
			//System.out.println();
			sheetindex++;
			i++;
		}
		//Scenarios
		sheetindex = 1;
		i=0;
		for(double[][][] centrales : scenarios){
			//Feuilles
			Sheet sheet1 = wb.getSheetAt(sheetindex);
			int colindex=1;
			int j=0;
			for(double[][] centrale : centrales){
				int k=0;
				for(double[] cols : centrale){
					//colonnes
					int rowindex=3;
					int l=0;
					for(double row : cols){
						//lignes
						Row rpal = sheet1.getRow(rowindex);
						Cell cell = rpal.getCell(colindex);
						switch (cell.getCellType()) {
						case Cell.CELL_TYPE_NUMERIC:

							if (!DateUtil.isCellDateFormatted(cell)) {
								System.out.print("NUEMRIIIIIC "+cell.getNumericCellValue()+ " ");
							}
							break;
						case Cell.CELL_TYPE_STRING:
							//Ajout dans le tableau � k j i
							//System.out.print(Double.parseDouble(cell.getRichStringCellValue().getString()));
							scenarios[i][j][k][l]=Double.parseDouble(cell.getRichStringCellValue().getString());
							break;
						default:
							System.out.println("Si vous voyez ceci, il y'a un probl�me dans la mise en forme des donn�es du xls");
						}
						rowindex++;
						l++;
					}
					colindex++;
					k++;
				}
				colindex++;
				j++;
			}
			sheetindex++;
			i++;
		}
		inp.close();
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		String buf="BinaireThermique [paliers=" + Arrays.deepToString(paliers)
				+ ",\n scenarios=";
		for(double i[][][] : scenarios){
			for(double j[][]:i){
				for(double k[]:j){
					buf+=Arrays.toString(k);
					buf+="\n";
				}
				buf+="\n";
			}
			buf+="\n";
		}
		return buf;
	}

	/**
	 * @return the paliers
	 */
	public double[][] getPaliers() {
		return paliers;
	}

	/**
	 * @return the scenarios
	 */
	public double[][][][] getScenarios() {
		return scenarios;
	}


}
